package lanqiao.真题.第11届决赛Java大学B组;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec
 * 【问题描述】
 * 小蓝在一张无限大的特殊画布上作画。
 * 这张画布可以看成一个方格图，每个格子可以用一个二维的整数坐标表示。
 * 小蓝在画布上首先点了一下几个点：(0,0)，(2020,11)，(11,14)，(2000,2000)。
 * 只有这几个格子上有黑色，其它位置都是白色的。
 * 每过一分钟，黑色就会扩散一点。具体的，如果一个格子里面是黑色，
 * 它就会扩散到上、下、左、右四个相邻的格子中，使得这四个格子也变成黑色(如果原来就是黑色，则还是黑色)。
 * 请问，经过2020分钟后，画布上有多少个格子是黑色的。
 * 【答案提交】
 * 这是一道结果填空的题，你只需要算出结果后提交即可。本题的结果为一个整数，
 * 在提交答案时只填写这个整数，填写多余的内容将无法得分。
 * @since 2023-06-07 22:51
 */
public class B_扩散 {
}
class MainB{
    static int minute = 2020;//
    static int[][] dir = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
    /*
    左上方(0,0)
    右下方(2000,2000)
    四个点向右下方平移 2050
    右下方 (4050,4050)
    2020分钟 最多可达
    开 7000 * 7000
     */
    static int n = 7000;
    static int l = 2050;
    static boolean[][] vis = new boolean[n][n];
    static int[][] dirs = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    public static void main(String[] args) {
        Deque<int[]> queue = new LinkedList<>();
        //(0,0)，(2020,11)，(11,14)，(2000,2000)
        int[][] points = {{0, 0}, {2020, 11}, {11, 14}, {2000, 2000}};
        for(int[] point : points){
            int x = point[0] + l;
            int y = point[1] + l;
            vis[x][y] = true;
            queue.offer(new int[]{x, y});
        }
        int res = 4;
        while(!queue.isEmpty()){
            if(minute <= 0){
                break;
            }
            int size = queue.size();
            while(size-- > 0){
                int[] now = queue.poll();
                for(int[] dir : dirs){
                    int nextX = dir[0] + now[0];
                    int nextY = dir[1] + now[1];
                    //2020 minute 不会越界
                    if(!vis[nextX][nextY]){
                        vis[nextX][nextY] = true;
                        res++;
                        queue.offer(new int[]{nextX, nextY});
                    }
                }
            }
            minute--;
        }
        //20312088
        System.out.println(res);
    }
}